require('dotenv').config();
const { sequelize, connectDB } = require('../config/database');
const { User, Category, Product } = require('../models');

const seedData = async () => {
  try {
    // 1. 连接数据库（对应文档🔶1-70至{insert\_element\_4\_}的数据库连接逻辑）
    await connectDB();
    console.log('✅ 数据库连接成功');

    // 2. 重置数据库（开发环境专用，谨慎使用）
    console.log('🗑️  正在重置数据库表结构...');
    await sequelize.sync({ force: true });

    // 3. 创建管理员用户（对应文档🔶1-97至{insert\_element\_5\_}的User模型）
    const admin = await User.create({
      username: 'admin',
      email: 'admin@eshop.com',
      password: 'Admin123!', // 符合文档中密码长度≥6、含大小写和数字的规则（{insert\_element\_6\_}）
      firstName: '管理员',
      lastName: '系统',
      role: 'admin',
      isActive: true
    });
    console.log('👑 管理员用户创建完成');

    // 4. 创建测试用户
    const customer = await User.create({
      username: 'customer',
      email: 'customer@example.com',
      password: 'Customer123!',
      firstName: '测试',
      lastName: '用户',
      phone: '13800138000',
      role: 'customer',
      isActive: true
    });
    console.log('👤 测试用户创建完成');

    // 5. 创建商品分类（对应文档🔶1-136至{insert\_element\_7\_}的Category模型）
    const categories = await Category.bulkCreate([
      {
        name: '电子产品',
        description: '手机、电脑、数码产品等',
        sortOrder: 1,
        isActive: true
      },
      {
        name: '服装鞋帽',
        description: '男装、女装、鞋类、配饰等',
        sortOrder: 2,
        isActive: true
      },
      {
        name: '家居生活',
        description: '家具、家电、日用品等',
        sortOrder: 3,
        isActive: true
      },
      {
        name: '图书音像',
        description: '书籍、音乐、影视等',
        sortOrder: 4,
        isActive: true
      }
    ]);
    console.log('📁 商品分类创建完成');

    // 6. 创建测试商品（对应文档🔶1-139至{insert\_element\_8\_}的Product模型）
    const products = [];
    for (let i = 1; i <= 50; i++) {
      const randomCategory = categories[Math.floor(Math.random() * categories.length)];
      products.push({
        name: `测试商品 ${i}`,
        description: `这是测试商品 ${i} 的详细描述，包含商品的特点和优势。`,
        shortDescription: `测试商品 ${i} 的简短描述`,
        sku: `SKU${i.toString().padStart(3, '0')}`, // 符合SKU唯一规则（{insert\_element\_9\_}）
        price: (Math.random() * 1000 + 10).toFixed(2),
        originalPrice: (Math.random() * 1200 + 50).toFixed(2),
        stock: Math.floor(Math.random() * 100) + 10, // 库存≥0（{insert\_element\_10\_}）
        lowStockThreshold: 10,
        categoryId: randomCategory.id,
        isActive: true,
        isFeatured: Math.random() > 0.7,
        images: [`uploads/products/product-${Date.now()}-${i}.jpg`], // 模拟图片路径（{insert\_element\_11\_}）
        tags: [`标签${i}`, randomCategory.name]
      });
    }
    await Product.bulkCreate(products);
    console.log('🛍️  测试商品创建完成');

    // 7. 输出成功信息（对应文档{insert\_element\_12\_}的提示格式）
    console.log('\n✅ 种子数据创建完成');
    console.log('📧 管理员账户: admin@eshop.com / Admin123!');
    console.log('📧 测试账户: customer@example.com / Customer123!');
    process.exit(0);

  } catch (error) {
    // 错误捕获与提示（补充文档中缺失的详细错误信息）
    console.error('❌ 种子数据创建失败:', error.message);
    // 输出数据库相关错误详情（帮助定位连接问题）
    if (error.name === 'SequelizeAccessDeniedError') {
      console.error('💡 原因：数据库用户名或密码错误，请检查.env文件中的DB_USER和DB_PASS');
    } else if (error.name === 'SequelizeConnectionRefusedError') {
      console.error('💡 原因：MySQL服务未启动或端口错误，请检查DB_PORT和MySQL服务状态');
    } else if (error.name === 'SequelizeDatabaseError') {
      console.error('💡 原因：数据库不存在，请先手动创建eshop_db数据库');
    }
    process.exit(1);
  }
};

// 执行种子数据生成
seedData();